/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package administrador;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 *
 * @author daniel1.Silva
 */
public class ProActualizaWebDB extends Thread {

    //Parametros de Conexion Internet:
    int ProductosCargados;
    
    Conexion conexionLocal;
    PanelActualizacion panelAct;
    int bodega;

    public ProActualizaWebDB(Conexion conexion,PanelActualizacion panelAct,int bodega){
     
        conexionLocal=conexion;
        this.panelAct=panelAct;
        this.bodega=bodega;

    }

    public void run(){
        boolean procesa=true;
       // while(procesa){
           //Realiza las Actualizaciones:

          //La bandera de productos cargados:
      
          //Tomando la base de datos de la computadora local y su base de datos se Actualizara la base del Internet
          String IPCliente ="174.136.152.21";// "174.136.152.21";
          String nombre = "sexyusuario";//"daniel1";
          String password = "yxes1984";
          String dbcliente = "sexylocuras";
          String puerto = "3306";
//          String IDCliente = "7";   // En el caso del identificador 1: Sexylocuras Centro (Padre Aguirre y Lamar)
                                    // Local Estadio = 2
                                    // Bodega = 3
                                    // Manta = 4
                                    // General Torres = 5
                                    // FutbolAdictos =6
                                    // Sexylocuras= 7 Azogues
                                    // daniel1 201 Estadio

          //Realizo la conexion a la base de datos cliente:
          Conexion conexionWeb = new Conexion();
          if (!conexionWeb.conectarBase(nombre, password, puerto, dbcliente, IPCliente)) {
             //System.out.println("No pudo establecer la conexion primera");
             // JOptionPane.showMessageDialog(panelAct, "No se pudo establecer conexion con la base de datos del Internet !!", "Informacion", JOptionPane.WARNING_MESSAGE);

          } else {
             // JOptionPane.showMessageDialog(panelAct, "Conecto a una base de Datos de Internet !!", "Informacion", JOptionPane.INFORMATION_MESSAGE);
              //Limpio el numero de productos cargados
              //conexionWeb.actualizarBase("update productos_locales set cantidad=0,precio=0 where id_locales="+IDCliente+";");

              //Traigo la base de datos de productos de subidos:
              ResultSet datosantiguos=conexionWeb.consultarBase("SELECT codigo,nombre,descripcion,precio,cantidad,cod_categ FROM productos_locales where id_locales="+bodega+";");
            try {
                datosantiguos.beforeFirst();
                conexionLocal.actualizarBaseResp("delete from productos_web;");
                while(datosantiguos.next()){
                //Inserto en la base Local:
                String codigoAnt = datosantiguos.getString(1);
                String nombreAnt = datosantiguos.getString(2);
                String descripcionAnt = datosantiguos.getString(3);
                Double precioAnt = datosantiguos.getDouble(4);
                int cantidadAnt = datosantiguos.getInt(5);
                int categoriaAnt = datosantiguos.getInt(6);

                
                conexionLocal.actualizarBaseResp("insert into productos_web values('"+codigoAnt+"','"+nombreAnt+"','"+descripcionAnt+"',"+precioAnt+","+cantidadAnt+","+categoriaAnt+");");
                }


            } catch (SQLException ex) {
                Logger.getLogger(ProActualizaWebDB.class.getName()).log(Level.SEVERE, null, ex);
            }





              //Ahora realizo la consulta y actualizacion de la tabla productos del Internet:
              ResultSet catalogoPro = conexionLocal.consultarBase("SELECT p.cod_producto,p.nombre,p.descripcion,p.precio_normal,i.cantidad,p.cod_categoria,p.precio_costo FROM producto p,itm_bodega i where i.cantidad>0 and p.cod_producto=i.cod_producto and i.cod_bodega="+bodega+" ;");
              int numfilas = conexionLocal.obtenerFilas(catalogoPro);
              ProductosCargados = 0;

              //Preparo la barra de progreso
              panelAct.txt_den.setText(String.valueOf(numfilas));



            // JOptionPane.showMessageDialog(panelAct, "El numero total de filas de la base central es !!" + numfilas, "Informacion", JOptionPane.INFORMATION_MESSAGE);

              int contadorAct = 0;
              int contandolistos = 0;

              //Creo los contadores de Productos y Errores
              int contadorActual = 0;
              int contadorInser = 0;
              int contadorErrorA = 0;
              int contadorErrorI = 0;

  
              try {
                  catalogoPro.beforeFirst();

                  while (catalogoPro.next()) {
                      //Pongo el lector de progresoo
                      //System.out.println("Los productos cargados son:" + p.ProductosCargados);
                      ProductosCargados++;

                      int porcentaje=(ProductosCargados*100)/Integer.valueOf(panelAct.txt_den.getText());
                      panelAct.barraProgreso.setValue(porcentaje);


                      int numero=ProductosCargados;
                      panelAct.txt_num.setText(String.valueOf(numero));
                      //----------------------------

                      String pID = catalogoPro.getString(1);
                      pID=pID.toLowerCase();
                      String pNAM = catalogoPro.getString(2);
                      String pDES = catalogoPro.getString(3);
                      double pPRE = catalogoPro.getDouble(4);
                      double pCOST = catalogoPro.getDouble(7);
                      int pCANT = catalogoPro.getInt(5);
                      int pCATEG = catalogoPro.getInt(6);

                      ResultSet cons = conexionLocal.consultarBase("select * from productos_web where codigo='" + pID + "' and cantidad="+pCANT+" ;");

                      int filas = conexionLocal.obtenerFilas(cons);

                      if (filas > 0) {
//                          //Si Existe el Producto
                          conexionWeb.consultarBase("START TRANSACTION;");
                          //Realizo la Actualizacion de la Tabla Productos:
                          boolean actual1 = conexionWeb.actualizarBaseResp("update productos_locales set nombre='" + pNAM + "',descripcion='" + pDES + "',precio=" + pPRE + ",cantidad=" + pCANT + " where codigo='" + pID + "' and id_locales="+bodega+";");


                          if (actual1) {
                              conexionWeb.consultarBase("COMMIT;");
                              contadorActual++;
                          } else {
                              panelAct.area.append("**Errores en Actualizacion: \n");
                              panelAct.area.append("  Codigo\tNombre\tDescripcion\n\n");
                              panelAct.area.append(pID+"\t"+pNAM+"\t"+pDES+"\n");
                              conexionWeb.consultarBase("ROLLBACK;");
                              contadorErrorA++;
                          }


                      } else {
                          //No Existe el Producto
                          conexionWeb.consultarBase("START TRANSACTION;");
                          //Creo el Producto Nuevo
                          
                          //Borro el producto para realizar la actualizacion:
                          conexionWeb.actualizarBaseResp("delete from productos_locales where codigo like '"+pID+"' and id_locales="+bodega+"; ");
                          //Inserto en la Tabla de Producto

                          //insert into products values(622,3,'','loco.gif',0,'2008-05-31 19:34:12',null,null,0,1,0,0,0);
                          boolean inst1 = conexionWeb.insertarDatosR("insert into productos_locales values(" + bodega + ",'" + pID + "'"
                                  + ",'" + pNAM + "','" + pDES + "'," + pPRE + "," + pCANT + ","+ pCATEG+","+pCOST+");");
                         

                          if (inst1) {
                              conexionWeb.consultarBase("COMMIT;");
                              contadorInser++;
                          } else {

                              panelAct.area.append("**Errores en Creacion: \n");
                              panelAct.area.append("  Codigo\tNombre\tDescripcion\n\n");
                              panelAct.area.append(pID+"\t"+pNAM+"\t"+pDES+"\n");
                              conexionWeb.consultarBase("ROLLBACK;");
                              contadorErrorI++;
                          }

                      }


                  }
                  //Registra en el Internet la ultima actualizacion:
                  int totalerrores=contadorErrorI+contadorErrorA;
                  int totalModificaciones=contadorActual+contadorInser;
                  String fecha=new java.sql.Date(System.currentTimeMillis()).toString();
                  String hora=new java.sql.Time(System.currentTimeMillis()).toString();
                  String fechahora=fecha+" "+hora;

                  //Borro productos del internet en Cero
                  conexionWeb.actualizarBaseResp("delete from productos_locales where cantidad=0 and id_locales="+bodega+";");
                  conexionWeb.insertarDatos("insert into actualizacion_web values(null,"+bodega+","+totalModificaciones+","+totalerrores+",'"+fechahora+"');");

              } catch (SQLException ex) {
                  Logger.getLogger(Productos.class.getName()).log(Level.SEVERE, null, ex);
              }
              //Finaliza la Actualizacion
              //Finaliza la barra de progreso:
              procesa = false;
              //-----------------------------

             // JOptionPane.showMessageDialog(panelAct, "Se realizo actualizaciones Exitosas:" + contadorActual + " de las cuales se produjeron: " + contadorErrorA + " ERRORES", "Informacion", JOptionPane.INFORMATION_MESSAGE);
             // JOptionPane.showMessageDialog(panelAct, "Se realizo inserciones Exitosas:" + contadorInser + " de las cuales se produjeron: " + contadorErrorI + " ERRORES", "Informacion", JOptionPane.INFORMATION_MESSAGE);
              String errores=panelAct.area.getText();
         //    //System.out.println("El area de texto:"+errores+"|");
             
              panelAct.dispose();
             

          }




       // }


    }




}
